package org.liuwei.concucrent.base03.HashMap10;

import java.util.concurrent.ConcurrentSkipListMap;
//concurrentHashMap与ConcurrentSkipListMap性能测试
//在4线程1.6万数据的条件下，ConcurrentHashMap 存取速度是ConcurrentSkipListMap 的4倍左右。
//
//但ConcurrentSkipListMap有几个ConcurrentHashMap 不能比拟的优点：
//
//1、ConcurrentSkipListMap 的key是有序的。
//
//2、ConcurrentSkipListMap 支持更高的并发。
//ConcurrentSkipListMap 的存取时间是log（N），和线程数几乎无关。
//也就是说在数据量一定的情况下，并发的线程越多，ConcurrentSkipListMap越能体现出他的优势。
public class ConcurrentSkipListMap02Test {
	static ConcurrentSkipListMap<String, String> map = new ConcurrentSkipListMap<>();
	public static void main(String[] args) {
		map.put("55", "55");
		map.put("44", "44");
		map.put("33", "33");
		map.forEach((k,v)->{System.out.println(k+"=="+v);});
	}
}
//二、使用建议
//在非多线程的情况下，应当尽量使用TreeMap。
//此外对于并发性相对较低的并行程序可以使用Collections.synchronizedSortedMap将TreeMap进行包装，也可以提供较好的效率。对于高并发程序，应当使用ConcurrentSkipListMap，能够提供更高的并发度。
//所以在多线程程序中，如果需要对Map的键值进行排序时，请尽量使用ConcurrentSkipListMap，可能得到更好的并发度。
//注意，调用ConcurrentSkipListMap的size时，由于多个线程可以同时对映射表进行操作，所以映射表需要遍历整个链表才能返回元素个数，这个操作是个O(log(n))的操作。